﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using PontoDeVenda.DataServiceReference;

namespace PontoDeVenda
{
    public partial class JanelaPedido : ChildWindow
    {

        private List<Cliente> clientes;
        private List<Produto> produtos;
        private decimal totalPedido;

        void proxy_GetPedidoPorIdCompleted(object sender,
            DataServiceReference.GetPedidoPorIdCompletedEventArgs e)
        {
            Pedido pedido = e.Result;
            if (pedido != null)
            {
                Cliente cliente = (from c in clientes
                               where c.clienteID == pedido.clienteID
                               select c).Single();
                cbbCliente.SelectedItem = cliente;

                try
                {
                    Produto produto = (from p in produtos
                                       where p.produtoID == pedido.ItensPedidos[0].produtoID
                                       select p).Single();
                    cbbProduto1.SelectedItem = produto;
                    txtQtd1.Text = pedido.ItensPedidos[0].qtdade.ToString();
                }
                catch { }

                try
                {
                    Produto produto = (from p in produtos
                                       where p.produtoID == pedido.ItensPedidos[1].produtoID
                                       select p).Single();
                    cbbProduto2.SelectedItem = produto;
                    txtQtd2.Text = pedido.ItensPedidos[1].qtdade.ToString();
                }
                catch { }

                try
                {
                    Produto produto = (from p in produtos
                                       where p.produtoID == pedido.ItensPedidos[2].produtoID
                                       select p).Single();
                    cbbProduto3.SelectedItem = produto;
                    txtQtd3.Text = pedido.ItensPedidos[2].qtdade.ToString();
                }
                catch { }

                try
                {
                    Produto produto = (from p in produtos
                                       where p.produtoID == pedido.ItensPedidos[3].produtoID
                                       select p).Single();
                    cbbProduto4.SelectedItem = produto;
                    txtQtd4.Text = pedido.ItensPedidos[3].qtdade.ToString();
                }
                catch { }

                try
                {
                    Produto produto = (from p in produtos
                                       where p.produtoID == pedido.ItensPedidos[4].produtoID
                                       select p).Single();
                    cbbProduto5.SelectedItem = produto;
                    txtQtd5.Text = pedido.ItensPedidos[4].qtdade.ToString();
                }
                catch { }


            }
            else
            {
                MessageBox.Show("Pedido não encontrado", "Select", MessageBoxButton.OK);
            }
        }

        void proxy_ListarClientesCompleted(object sender, DataServiceReference.ListarClientesCompletedEventArgs e)
        {
            clientes = e.Result.ToList();

            cbbCliente.DisplayMemberPath = "nome";
            cbbCliente.ItemsSource = clientes;
        }

        void proxy_ListarProdutosCompleted(object sender, DataServiceReference.ListarProdutosCompletedEventArgs e)
        {
            produtos = e.Result.ToList();

            cbbProduto1.DisplayMemberPath = "descricao";
            cbbProduto1.ItemsSource = produtos;
            cbbProduto1.SelectionChanged += new SelectionChangedEventHandler(cbbProduto_SelectionChanged);

            cbbProduto2.DisplayMemberPath = "descricao";
            cbbProduto2.ItemsSource = produtos;
            cbbProduto2.SelectionChanged += new SelectionChangedEventHandler(cbbProduto_SelectionChanged);

            cbbProduto3.DisplayMemberPath = "descricao";
            cbbProduto3.ItemsSource = produtos;
            cbbProduto3.SelectionChanged += new SelectionChangedEventHandler(cbbProduto_SelectionChanged);

            cbbProduto4.DisplayMemberPath = "descricao";
            cbbProduto4.ItemsSource = produtos;
            cbbProduto4.SelectionChanged += new SelectionChangedEventHandler(cbbProduto_SelectionChanged);

            cbbProduto5.DisplayMemberPath = "descricao";
            cbbProduto5.ItemsSource = produtos;
            cbbProduto5.SelectionChanged += new SelectionChangedEventHandler(cbbProduto_SelectionChanged);
            
        }

        

        void cbbProduto_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (sender == cbbProduto1)
            {
                Produto p = (Produto)cbbProduto1.SelectedItem;
                decimal total = 0;
                txtPreco1.Text = p.precoUnitario.ToString();

                try
                {
                    total = p.precoUnitario * Convert.ToDecimal(txtQtd1.Text);
                }
                catch { }
                finally
                {
                    txtTotal1.Text = total.ToString();
                }
            }
            else if (sender == cbbProduto2)
            {
                Produto p = (Produto)cbbProduto2.SelectedItem;
                decimal total = 0;
                txtPreco2.Text = p.precoUnitario.ToString();

                try
                {
                    total = p.precoUnitario * Convert.ToDecimal(txtQtd2.Text);
                }
                catch { }
                finally
                {
                    txtTotal2.Text = total.ToString();
                }
            }
            else if (sender == cbbProduto3)
            {
                Produto p = (Produto)cbbProduto3.SelectedItem;
                decimal total = 0;
                txtPreco3.Text = p.precoUnitario.ToString();

                try
                {
                    total = p.precoUnitario * Convert.ToDecimal(txtQtd3.Text);
                }
                catch { }
                finally
                {
                    txtTotal3.Text = total.ToString();
                }
            }
            else if (sender == cbbProduto4)
            {
                Produto p = (Produto)cbbProduto4.SelectedItem;
                decimal total = 0;
                txtPreco4.Text = p.precoUnitario.ToString();

                try
                {
                    total = p.precoUnitario * Convert.ToDecimal(txtQtd4.Text);
                }
                catch { }
                finally
                {
                    txtTotal4.Text = total.ToString();
                }
            }
            else if (sender == cbbProduto5)
            {
                Produto p = (Produto)cbbProduto5.SelectedItem;
                decimal total = 0;
                txtPreco5.Text = p.precoUnitario.ToString();

                try
                {
                    total = p.precoUnitario * Convert.ToDecimal(txtQtd5.Text);
                }
                catch { }
                finally
                {
                    txtTotal5.Text = total.ToString();
                }
            }

            calcularTotal();

        }

        private void calcularTotal()
        {
            decimal total1 = 0;
            decimal total2 = 0;
            decimal total3 = 0;
            decimal total4 = 0;
            decimal total5 = 0;

            try
            {
                total1 = Convert.ToDecimal(txtTotal1.Text);
            }
            catch { }
            try
            {
                total2 = Convert.ToDecimal(txtTotal2.Text);
            }
            catch { }
            try
            {
                total3 = Convert.ToDecimal(txtTotal3.Text);
            }
            catch { }
            try
            {
                total4 = Convert.ToDecimal(txtTotal4.Text);
            }
            catch { }
            try
            {
                total5 = Convert.ToDecimal(txtTotal5.Text);
            }
            catch { }
            totalPedido = total1 + total2 + total3 + total4 + total5;

            txtTotalPedido.Text = totalPedido.ToString();
        }

        void txtQtd_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (sender == txtQtd1)
            {
                cbbProduto_SelectionChanged(cbbProduto1, null);
            }
            else if (sender == txtQtd2)
            {
                cbbProduto_SelectionChanged(cbbProduto2, null);
            }
            else if (sender == txtQtd3)
            {
                cbbProduto_SelectionChanged(cbbProduto3, null);
            }
            else if (sender == txtQtd4)
            {
                cbbProduto_SelectionChanged(cbbProduto4, null);
            }
            else if (sender == txtQtd5)
            {
                cbbProduto_SelectionChanged(cbbProduto5, null);
            }

        }

        public JanelaPedido()
        {
            InitializeComponent();
            clientes = new List<Cliente>();
            produtos = new List<Produto>();
            totalPedido = 0;

            DataServiceReference.DataServiceClient proxy = new
                    DataServiceReference.DataServiceClient();

            proxy.ListarClientesCompleted += new
                 EventHandler<DataServiceReference
                 .ListarClientesCompletedEventArgs>(proxy_ListarClientesCompleted);
            proxy.ListarClientesAsync();

            proxy.ListarProdutosCompleted += new
                 EventHandler<DataServiceReference
                 .ListarProdutosCompletedEventArgs>(proxy_ListarProdutosCompleted);
            proxy.ListarProdutosAsync();

            txtQtd1.TextChanged += new TextChangedEventHandler(txtQtd_TextChanged);
            txtQtd2.TextChanged += new TextChangedEventHandler(txtQtd_TextChanged);
            txtQtd3.TextChanged += new TextChangedEventHandler(txtQtd_TextChanged);
            txtQtd4.TextChanged += new TextChangedEventHandler(txtQtd_TextChanged);
            txtQtd5.TextChanged += new TextChangedEventHandler(txtQtd_TextChanged);

        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }

        private void btnLocalizar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                int pedidoID = Convert.ToInt16(txtPedidoID.Text);
                DataServiceReference.DataServiceClient proxy = new
                    DataServiceReference.DataServiceClient();

                proxy.GetPedidoPorIdCompleted += new
                    EventHandler<DataServiceReference
                    .GetPedidoPorIdCompletedEventArgs>(proxy_GetPedidoPorIdCompleted);
                proxy.GetPedidoPorIdAsync(pedidoID);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButton.OK);
            }
        }

        private void btnInserirPedido_Click(object sender, RoutedEventArgs e)
        {
            Pedido p = new Pedido();
            p.pedidoID = Convert.ToInt32(txtPedidoID.Text);
            p.data = DateTime.Now;
            p.valor = totalPedido;
            p.clienteID = ((Cliente)cbbCliente.SelectedItem).clienteID;

            p.ItensPedidos = new System.Collections.ObjectModel.ObservableCollection<ItensPedido>();

            int num = 1;
            decimal preco;

            if (txtTotal1.Text != "")
                preco = Convert.ToDecimal(txtTotal1.Text);
            else
                preco = 0;
            if (preco != 0)
            {
                ItensPedido item = new ItensPedido();
                item.itemNum = num;
                item.qtdade = Convert.ToInt32(txtQtd1.Text);
                item.precoVenda = preco;
                item.pedidoID = p.pedidoID;
                item.produtoID = ((Produto)cbbProduto1.SelectedItem).produtoID;
                num++;

                p.ItensPedidos.Add(item);
            }

            if (txtTotal2.Text != "")
                preco = Convert.ToDecimal(txtTotal2.Text);
            else
                preco = 0;
            if (preco != 0)
            {
                ItensPedido item = new ItensPedido();
                item.itemNum = num;
                item.qtdade = Convert.ToInt32(txtQtd2.Text);
                item.precoVenda = preco;
                item.pedidoID = p.pedidoID;
                item.produtoID = ((Produto)cbbProduto2.SelectedItem).produtoID;
                num++;

                p.ItensPedidos.Add(item);
            }

            if (txtTotal3.Text != "")
                preco = Convert.ToDecimal(txtTotal3.Text);
            else
                preco = 0;
            if (preco != 0)
            {
                ItensPedido item = new ItensPedido();
                item.itemNum = num;
                item.qtdade = Convert.ToInt32(txtQtd3.Text);
                item.precoVenda = preco;
                item.pedidoID = p.pedidoID;
                item.produtoID = ((Produto)cbbProduto3.SelectedItem).produtoID;
                num++;

                p.ItensPedidos.Add(item);
            }

            if (txtTotal4.Text != "")
                preco = Convert.ToDecimal(txtTotal4.Text);
            else
                preco = 0;
            if (preco != 0)
            {
                ItensPedido item = new ItensPedido();
                item.itemNum = num;
                item.qtdade = Convert.ToInt32(txtQtd4.Text);
                item.precoVenda = preco;
                item.pedidoID = p.pedidoID;
                item.produtoID = ((Produto)cbbProduto4.SelectedItem).produtoID;
                num++;

                p.ItensPedidos.Add(item);
            }

            if (txtTotal5.Text != "")
                preco = Convert.ToDecimal(txtTotal5.Text);
            else
                preco = 0;
            if (preco != 0)
            {
                ItensPedido item = new ItensPedido();
                item.itemNum = num;
                item.qtdade = Convert.ToInt32(txtQtd5.Text);
                item.precoVenda = preco;
                item.pedidoID = p.pedidoID;
                item.produtoID = ((Produto)cbbProduto5.SelectedItem).produtoID;
                num++;

                p.ItensPedidos.Add(item);
            }

            if (p.ItensPedidos.Count == 0)
                MessageBox.Show("Adicione pelo menos um produto", "Erro", MessageBoxButton.OK);
            else
            {
                DataServiceReference.DataServiceClient proxy = new
                        DataServiceReference.DataServiceClient();
                proxy.InserirPedidoAsync(p);
            }
        }

        private void btnAtualizarPedido_Click(object sender, RoutedEventArgs e)
        {
            Pedido p = new Pedido();
            p.pedidoID = Convert.ToInt32(txtPedidoID.Text);
            p.data = DateTime.Now;
            p.valor = totalPedido;
            p.clienteID = ((Cliente)cbbCliente.SelectedItem).clienteID;

            p.ItensPedidos = new System.Collections.ObjectModel.ObservableCollection<ItensPedido>();

            int num = 1;
            decimal preco;

            if (txtTotal1.Text != "")
                preco = Convert.ToDecimal(txtTotal1.Text);
            else
                preco = 0;
            if (preco != 0)
            {
                ItensPedido item = new ItensPedido();
                item.itemNum = num;
                item.qtdade = Convert.ToInt32(txtQtd1.Text);
                item.precoVenda = preco;
                item.pedidoID = p.pedidoID;
                item.produtoID = ((Produto)cbbProduto1.SelectedItem).produtoID;
                num++;

                p.ItensPedidos.Add(item);
            }

            if (txtTotal2.Text != "")
                preco = Convert.ToDecimal(txtTotal2.Text);
            else
                preco = 0;
            if (preco != 0)
            {
                ItensPedido item = new ItensPedido();
                item.itemNum = num;
                item.qtdade = Convert.ToInt32(txtQtd2.Text);
                item.precoVenda = preco;
                item.pedidoID = p.pedidoID;
                item.produtoID = ((Produto)cbbProduto2.SelectedItem).produtoID;
                num++;

                p.ItensPedidos.Add(item);
            }

            if (txtTotal3.Text != "")
                preco = Convert.ToDecimal(txtTotal3.Text);
            else
                preco = 0;
            if (preco != 0)
            {
                ItensPedido item = new ItensPedido();
                item.itemNum = num;
                item.qtdade = Convert.ToInt32(txtQtd3.Text);
                item.precoVenda = preco;
                item.pedidoID = p.pedidoID;
                item.produtoID = ((Produto)cbbProduto3.SelectedItem).produtoID;
                num++;

                p.ItensPedidos.Add(item);
            }

            if (txtTotal4.Text != "")
                preco = Convert.ToDecimal(txtTotal4.Text);
            else
                preco = 0;
            if (preco != 0)
            {
                ItensPedido item = new ItensPedido();
                item.itemNum = num;
                item.qtdade = Convert.ToInt32(txtQtd4.Text);
                item.precoVenda = preco;
                item.pedidoID = p.pedidoID;
                item.produtoID = ((Produto)cbbProduto4.SelectedItem).produtoID;
                num++;

                p.ItensPedidos.Add(item);
            }

            if (txtTotal5.Text != "")
                preco = Convert.ToDecimal(txtTotal5.Text);
            else
                preco = 0;
            if (preco != 0)
            {
                ItensPedido item = new ItensPedido();
                item.itemNum = num;
                item.qtdade = Convert.ToInt32(txtQtd5.Text);
                item.precoVenda = preco;
                item.pedidoID = p.pedidoID;
                item.produtoID = ((Produto)cbbProduto5.SelectedItem).produtoID;
                num++;

                p.ItensPedidos.Add(item);
            }

            if (p.ItensPedidos.Count == 0)
                MessageBox.Show("Adicione pelo menos um produto", "Erro", MessageBoxButton.OK);
            else
            {
                DataServiceReference.DataServiceClient proxy = new
                        DataServiceReference.DataServiceClient();
                proxy.AtualizarPedidoAsync(p);
            }
        }

        private void btnExcluirPedido_Click(object sender, RoutedEventArgs e)
        {
            int id = Convert.ToInt32(txtPedidoID.Text);

            DataServiceReference.DataServiceClient proxy = new
                        DataServiceReference.DataServiceClient();
            proxy.DeletarPedidoAsync(id);
        }
    }
}

